package com.wowangz.cms.syscore.utils;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 
import org.springframework.core.io.support.EncodedResource;

public class SystemConfig {
	
//对应系统配置文件systemConfig里Items的属性type
private String typeValue;


//有参构造函数
public SystemConfig(String typeValue){
this.typeValue=typeValue;
}


public String getTypeValue() {
	return typeValue;
}



public void setTypeValue(String typeValue) {
	this.typeValue = typeValue;
}



//通过items的属性type,获得items里item的map映射
public Map getKeyValueMap(){
	//读取xml文件
	Document document=readXmlFile();
	//获得Item节点的key和value的map
	Map itemMap=getMapByItemsType(document);
	return itemMap;
}


//读取systemConfig配置文件
private Document readXmlFile(){
    //创建读入对象
    SAXReader reader = new SAXReader();
    //创建document实例
    Document doc=null;
    try {
    //从类路径下加载文件systemConfig.xml	
    Resource resource = new ClassPathResource("conf/systemConfig.xml"); 
    //指定文件资源对应的编码格式（UTF-8),这样才能正确读取文件的内容，而不会出现乱码
    EncodedResource encodeResource = new EncodedResource(resource,"UTF-8"); 
    doc = reader.read(encodeResource.getReader());
	} 
    catch (IOException e) {
    	System.out.println("无法读取系统配置文件systemConfig.xml,可能该文件不存在");
    	e.printStackTrace();
		
	} catch (DocumentException e) {
		System.out.println("解析systemConfig.xml文件出现异常");
		e.printStackTrace();
		
	}catch (Exception e)
    {
		System.out.println("解析systemConfig.xml文件出现异常");
		e.printStackTrace();
    }
	return doc;

}

//读取xml节点,返回节点为Item的list
private Map getMapByItemsType(Document document){
	Map itemmap=new HashMap();
	try{
	//获得根节点SystemConfig
	Element root=document.getRootElement();
	//获得根节点下所有子节点Items的list
	List itemsList=root.selectNodes("./Items");
	for(int i=0;i<itemsList.size();i++){
		//获得节点Items
		Element items=(Element)itemsList.get(i);
		String typevalue=items.attribute("type").getText();
		//如果Items的属性type的值等于this.getTypeValue()
		if(typevalue!=null&&typevalue.equals(this.getTypeValue())){
			 //获得Items下所有子节点Item的list
			 List itemList=items.elements();
			 //获得Item节点的map映射
			 itemmap = getItemMap(itemList);
		}
	    
	}
	}
	catch(Exception e){
		
	}
	return itemmap;
}


//获得所有Item下节点的map
private Map getItemMap(List itemList){
	Map keymap=new HashMap();
	for(int i=0;i<itemList.size();i++){
		//获得节点Item
		Element item=(Element)itemList.get(i);
		String key=null;
		String value=null;
		//获得节点key的值
		Element keynode=(Element)item.selectSingleNode("./key");
		if(keynode!=null){
		key=keynode.getText();
		}
		//获得节点value的值
		Element valuenode=(Element)item.selectSingleNode("./value");
		if(valuenode!=null){
		value=valuenode.getText();
		}
	    if(key!=null&&!key.equals("")){
			keymap.put(key, value);
		}
   }
	return keymap;
	
	
}
}
